from ics.backend.vector_store.load_vector_db import load_vector_db

# 从已有的数据库中寻找相似数据
db_vector = load_vector_db("./vector_store/db/chroma_db")
def perform_query(query, k, threshold=0.5):
    """执行查询并返回最相似的文档内容，包含得分信息，且根据得分判断是否调用外部API。"""
    try:
        # 从向量数据库中执行相似度搜索，返回文档和分数
        docs_and_scores = db_vector.similarity_search_with_score(query, k)

        # 判断是否找到足够相关的信息
        if not docs_and_scores:
            return "", False  # 没有找到相关内容

        # 使用列表推导和 join 拼接文本块
        context_list = [f"{doc.page_content}\nScore: {score}\n-----\n" for doc, score in docs_and_scores]

        # 获取总得分最高的文档
        highest_score = docs_and_scores[0][1]  # 第一篇文档的得分

        # 判断得分是否超过阈值，超过阈值则认为找到足够相关的内容
        if highest_score >= threshold:
            print(highest_score)
            context = ''.join(context_list)
            return context, True  # 找到了足够相关的信息
        else:
            return "", False  # 本地没有足够相关的信息，需要调用外部API

    except Exception as e:
        # 处理查询过程中可能的异常，输出错误信息
        print(f"Error occurred during query execution: {e}")
        return "", False  # 如果出现错误，返回空字符串，并表示需要调用外部API

